#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 拼接src1和src2到dest，需保证dest有足够空间（至少len1+len2+1字节）
void concatenateStrings(char *dest, const char *src1, const char *src2) {
    // 检查空指针（src1/src2用const修饰，表明不修改原字符串）
    if (src1 == NULL || src2 == NULL || dest == NULL) {
        printf("Null pointer provided.\n");
        return;
    }

    // 计算字符串实际长度（不含'\0'）
    size_t len1 = strlen(src1);  // strlen返回从首地址到'\0'的字符数
    size_t len2 = strlen(src2);

    // 拼接src1到dest
    for (size_t i = 0; i < len1; i++) {
        dest[i] = src1[i];
    }

    // 拼接src2到dest（接在src1后面）
    for (size_t i = 0; i < len2; i++) {
        dest[len1 + i] = src2[i];
    }

    // 添加结束符（总长度为len1+len2）
    dest[len1 + len2] = '\0';// 结束符
}
int main()
{
    char str1[]="Hello";
    char str2[]="World!";
    // 计算两个数组的总元素个数
    // 计算字符串实际长度（不含'\0'）
    size_t len1 = strlen(str1);  // strlen返回从首地址到'\0'的字符数
    size_t len2 = strlen(str2);
    size_t len = len1 + len2 + 1;
    
    // 分配合并后数组的内存
    char* dest = (char*)malloc(len * sizeof(char));
    if (dest == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
     // 确保目标数组足够大以容纳连接后的字符串
    concatenateStrings(dest, str1, str2);
    printf("Concatenated String: %s\n", dest);
    free(dest); // 释放分配的内存

        


    return 0;
}